import java.util.Collections;
import java.util.PriorityQueue;

class Solution {
    public int lastStoneWeight(int[] stones) {
        /**
         * 最后一块石头的重量
         * 题目本质：
         *  最重要的就是动态维护数组中的最大值
         * 解题思路：
         *  使用优先级队列维护数组中的最大值*/
        // 1 预处理
        PriorityQueue<Integer> heap = new PriorityQueue<>(Collections.reverseOrder());
        for(int x: stones) {
            heap.offer(x);
        }

        // 2 模拟
        while(heap.size() >= 2) {
            int cur = Math.abs(heap.poll() - heap.poll());
            if(cur != 0) {
                heap.offer(cur);
            }
        }

        // 3 返回值
        if(heap.isEmpty()) {
            return 0;
        } else {
            return heap.poll();
        }
    }
}